package com.wyu.blog.component;

import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用拦截器处理登录检查
 * Created by hgq on 2019/11/26.
 */
public class LoginHandlerInterceptor implements HandlerInterceptor{


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        Object user = request.getSession().getAttribute("loginUser");

        String ticket = null;
        if (request.getCookies() != null){
            for (Cookie cookie : request.getCookies()){
                if ("ticket".equals(cookie.getName())){
                    ticket = cookie.getValue();
                    break;
                }
            }
        }
//        if (ticket!=null){
//            LoginTicket loginTicket = loginTicketDao.seletByTicket(ticket);
//            if (loginTicket == null || loginTicket.getUserExpired().before(new Date())||loginTicket.getUserStatus()!=0){
//                return true;
//            }
//            User user = u.seletById(loginTicket.getUserId());
//            hostHolder.setUser(user);
//        }

        if(user == null){
            //未登录,返回登录页面
            request.setAttribute("msg","没有权限请先登录");
            request.getRequestDispatcher("/").forward(request,response);
            return false;
        }else{
           //已登录,放行请求
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, @Nullable ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, @Nullable Exception ex) throws Exception {

    }
}
